[AWS]EC2へのsshアクセスを少し楽にする[ec2-ssh]
EC2でsshアクセスはよく使います
最近、仕事でEC2を使用する機会が非常にふえました。EC2にsshログインして作業をすることもよくあるのですが、 インスタンス数の増加にしたがって、EC2のホスト名を管理するのも面倒になってきます。
通常、ホスト名管理が面倒な場合はconfigファイルに次のようにホスト名の別名を定義すれば楽です。
#~/.ssh/config Host sample-host Hostname ec2-xxx-xxx-xxx-xxx.amazonaws.com
上記configがあれば、下記のようにEC2へsshログイン可能です。
% ssh -i <キーファイル> ec2-user@sample-host
しかし、インスタンスを起動したり消したりしていると、当然ながらec2-xxx〜なホスト名は変わってしまいます。 EIPを使えば固定しておけますが、開発の時やAutoScaleで動的にインスタンスが変わる場合等、 いちいちすべてのEC2にEIPを割り当てるのも面倒です。 となると、AWSコンソールでインスタンスを確認して、新しいホスト名を確認してそれをまたconfigに書いて・・という無駄な作業を繰り返すことになってしまいます。
そういったケースで役立つのが、今回紹介するec2sshです。 けっこう前からあるツールみたいなのですが、これを使えば、EC2のNameタグからホスト名を取得してsshのconfigに書きこんでくれます。
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.5
- ruby : 2.0.0pre195
- gem : 2.0.3
ec2sshはgemで簡単にインストールできます。 ※私の環境ではRubyが1.8のままほったらかしだったので、最初インストールに失敗しました・・
% sudo gem install ec2ssh
ec2sshを使ってみる
インストールが完了したら、次の環境変数を設定し、initコマンドを実行しましょう。
% export AMAZON_ACCESS_KEY_ID="<アクセスキー>" % export AMAZON_SECRET_ACCESS_KEY="<シークレットキー>" % ec2ssh init
すると、ホームディレクトリに.ec2sshファイルが作成されます。 このファイルを元にsshのconfigファイルが更新されます。
--- path: /path/your/.ssh/config aws_keys: default: access_key_id: <アクセスキー> secret_access_key: <シークレットキー> regions: - ap-northeast-1
設定が問題なければ、updateコマンドを実行してconfigファイルを更新しましょう。
% ec2ssh update
更新されたconfigファイルを見てみましょう。既存設定の下に、AWSアカウントに紐付いたEC2インスタンスが登録されています。
・ ・ ### EC2SSH BEGIN ### # Generated by ec2ssh http://github.com/mirakui/ec2ssh # DO NOT edit this block! # Updated xxx # section: default Host myec2-1.ap-northeast-1 HostName ec2-xxx.xxx.xxx.xxx.amazonaws.com Host myec2-2.ap-northeast-1 HostName ec2-xxx.xxx.xxx.xxx.amazonaws.com ・ ・
configが更新されれば、あとはsshで普通にログインできます。
% ssh -i <キーファイル> [email protected]
また、ec2sshは複数のAWSアカウントにも対応しています。次のように.ec2sshを記述すれば、複数のAWSアカウントを登録できます。
--- path: /path/your/.ssh/config aws_keys: default: access_key_id: <アクセスキー1> secret_access_key: <シークレットキー1> myProject-Key: access_key_id: <アクセスキー2> secret_access_key: <シークレットキー2> regions: - ap-northeast-1
configを更新する場合、更新したいキーを指定します。
% ec2ssh update --aws-key myProject-Key
ec2sshの情報をconfigから削除したい場合、removeコマンドで元に戻ります。
% ec2ssh remove
まとめ
複数アカウント/複数インスタンスを使用する場合、こういったツールで少しでも楽したいですね。 欲を言えばUserとかIdentityFileとかも.ec2sshに設定できたら最高なんですが、いまのところは無理みたいです。 (できるようにしているGithubのforkもありましたが) 私の場合、とりあえず次のようにaliasを設定してホスト名だけでアクセスできるようにしてます。
% alias awsssh="ssh -i <sshキーのパス> -l ec2-user" % ssh myec2-1.ap-northeast-1
参考サイトなど
- Github: https://github.com/mirakui/ec2ssh
- ec2-ssh紹介記事: http://blog.mirakui.com/entry/20101205/1291551625